﻿using IQReportes.Models;
using IQReportes.Models.Logica;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace IQReportes.ViewModels
{
    /// <summary>
    /// Clase para la vista de los datos de los módulos
    /// </summary>
    public class ModuloInfoViewModel
    {

        /// <summary>
        /// Id
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// Colores del módulo
        /// </summary>
        public List<String> colores { get; set; }
        /// <summary>
        /// Nombre del módulo
        /// </summary>
        public string nombre { get; set; }
        /// <summary>
        /// Valor entero del tipo de vizualización de chart
        /// </summary>
        public int tipoChart { get; set; }
        /// <summary>
        /// Valor de tipo de dato del módulo Tree
        /// </summary>
        public int valorTree { get; set; }
        /// <summary>
        /// Posibilidad de descarga
        /// </summary>
        public bool descargar { get; set; }
        /// <summary>
        /// Posibilidad de visualización
        /// </summary>
        public bool ver { get; set; }

        /// <summary>
        /// Convertir ViewModel a Model de BD
        /// </summary>
        /// <param name="tipo">tipo de chart</param>
        /// <param name="numModulo">número de módulo</param>
        /// <returns>objeto Módulo de BD</returns>
        public Modulo extract(int tipo, int numModulo)
        {
            Modulo m = new Modulo();
            m.idModulo = Int32.Parse(this.id);
            m.vcNombre = this.nombre;
            m.inNumModulo = numModulo;
            m.inTipo = tipo;
            return m;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="modulo">Objeto módulo de BD</param>
        /// <param name="ver">posibilidad de visualización</param>
        /// <param name="descargar">Posibilidad de descarga</param>
        public ModuloInfoViewModel(Modulo modulo, bool ver, bool descargar)
        {
            this.id = modulo.idModulo + "";

            this.nombre = modulo.vcNombre;
            this.descargar = descargar;
            this.ver = ver;
        }
        /// <summary>
        /// constructor con parámetros
        /// </summary>
        /// <param name="id">id</param>
        /// <param name="colores">colores</param>
        /// <param name="nombre">nombre del módulo</param>
        /// <param name="tipoChart">tipo de chart</param>
        /// <param name="valorTree">valor del tree</param>
        public ModuloInfoViewModel(int id, List<String> colores, string nombre, int tipoChart, int valorTree)
        {
            this.colores = colores;
            this.nombre = nombre;
            this.tipoChart = tipoChart;
            this.valorTree = valorTree;
            this.id = id + "";
            this.descargar = false;
            this.ver = true;
        }
        /// <summary>
        /// Constructor con parámetros
        /// </summary>
        /// <param name="id">id</param>
        /// <param name="nombre">nombre módulo</param>
        /// <param name="ver">posibilidad de visualización</param>
        /// <param name="descargar">posibilidad de descarga</param>
        public ModuloInfoViewModel(string id, string nombre, bool ver, bool descargar)
        {
            this.id = id;
            this.nombre = nombre;
            this.ver = ver;
            this.descargar = descargar;
        }
        /// <summary>
        /// Constructor con parámetros
        /// </summary>
        /// <param name="id">id</param>
        /// <param name="colores">colores</param>
        /// <param name="nombre">nombre del módulo</param>
        /// <param name="tipoChart">tipo de chart</param>
        public ModuloInfoViewModel(int id, List<String> colores, string nombre, int tipoChart)
        {
            this.colores = colores;
            this.nombre = nombre;
            this.tipoChart = tipoChart;
            this.id = id + "";
            this.valorTree = -1;
            this.descargar = true;
            this.ver = true;
        }
        public ModuloInfoViewModel() { }

        /// <summary>
        /// constructor con parámetro
        /// </summary>
        /// <param name="pXm">objeto PerfilXModulo</param>
        public ModuloInfoViewModel(PerfilXModulo pXm)
        {
            this.id = pXm.idModulo + "";
            this.nombre = pXm.modulo.vcNombre;/*(new LogicaModulo()).getNombreModuloById(pXm.idModulo);*/
            this.descargar = pXm.bDescargar;
            this.ver = pXm.bVer;
        }
        /// <summary>
        /// Obtener perfilXModulo
        /// </summary>
        /// <param name="nuevoPerfil">Perfil</param>
        /// <returns>perfilXModulo</returns>
        public PerfilXModulo extractPXM(Perfil nuevoPerfil)
        {
            PerfilXModulo pxm = new PerfilXModulo();
            pxm.idPerfil = nuevoPerfil.idPerfil;
            pxm.idModulo = Int32.Parse(this.id);
            pxm.bDescargar = this.descargar;
            pxm.bVer = this.ver;
            return pxm;
        }
        /// <summary>
        /// obtener usuarioXModulo
        /// </summary>
        /// <param name="idUsuario">id usuario</param>
        /// <returns>objeto usuarioXModulo</returns>
        public UsuarioXModulo extract(int idUsuario)
        {
            UsuarioXModulo uxm = new UsuarioXModulo();
            uxm.idModulo = Int32.Parse(this.id);
            uxm.idUsuario = idUsuario;
            uxm.inTipoChart = this.tipoChart;
            return uxm;
        }
    }
}